package org.dromara.community.service.impl;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.google.gson.Gson;
import com.qiniu.common.QiniuException;
import com.qiniu.http.Response;
import com.qiniu.storage.Configuration;
import com.qiniu.storage.UploadManager;
import com.qiniu.storage.model.DefaultPutRet;
import com.qiniu.util.Auth;
import org.dromara.community.entity.AsCommunityAnnouncements;
import org.dromara.community.entity.AsNoticeImage;
import org.dromara.community.entity.dto.AsCommunityAnnouncementsDTO;
import org.dromara.community.mapper.AsCommunityAnnouncementsMapper;
import org.dromara.community.mapper.AsNoticeImageMapper;
import org.dromara.community.service.AsCommunityAnnouncementsService;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;

import java.awt.*;
import java.util.*;
import java.util.List;
import java.util.stream.Collectors;

@Service
public class AsCommunityAnnouncementsServiceimpl extends ServiceImpl<AsCommunityAnnouncementsMapper, AsCommunityAnnouncements> implements AsCommunityAnnouncementsService {
    // 七牛云的accessKey
    private static String accessKey = "bia0cM3uFDJ69kx_tzT255eeyNjQ2EomQuv5nKaT";

    // 七牛云的secretKey
    private static String secretKey = "_EhxA9ZRNm-JjR7Q6IdxdQeIOziG_v9A9xKTy3Fq";

    // 七牛云的存储空间名称
    private static String bucket = "commpro";

    // 七牛云的存储空间链接
    private static String path = "http://shfflvwvr.hb-bkt.clouddn.com";

    @Autowired
    private AsCommunityAnnouncementsMapper asCommunityAnnouncementsMapper;

    @Autowired
    private AsNoticeImageMapper asNoticeImageMapper;

    /**
     * 根据标题查询社区公告信息
     * <p>
     * 该方法用于通过公告标题的一部分，查询匹配的社区公告详细信息
     * 当标题为空或仅包含空格时，将返回一个空列表
     * 否则，将执行数据库查询，并将结果转换为DTO（数据传输对象）格式的列表返回
     *
     * @param title 公告标题的一部分，用于模糊查询
     * @return 匹配的社区公告信息列表，以DTO格式呈现
     */
    @Override
    public List<AsCommunityAnnouncementsDTO> SelectAsCommunity(String title) {
        // 输入参数为空时，直接返回空列表
        if (title == null || title.trim().isEmpty()) {
            return List.of();
        }

        // 创建查询包装器，用于构建查询条件
        QueryWrapper<AsCommunityAnnouncements> queryWrapper = new QueryWrapper<>();
        // 设置模糊查询条件
        queryWrapper.like("title", title);

        // 执行查询，获取结果列表
        List<AsCommunityAnnouncements> announcements = asCommunityAnnouncementsMapper.selectList(queryWrapper);

        // 将查询结果转换为 DTO 类型
        return announcements.stream()
            .map(announcement -> {
                AsCommunityAnnouncementsDTO dto = new AsCommunityAnnouncementsDTO();
                // 直接复制属性
                BeanUtils.copyProperties(announcement, dto);
                return dto;
            })
            .collect(Collectors.toList());
    }

    @Override
/**
 * 根据图片ID查询公告信息
 * 此方法主要负责从数据库中检索与特定图片ID相关的所有公告信息，并将结果转换为自定义的DTO格式
 * 它首先调用映射器（mapper）方法获取原始公告数据，然后处理这些数据，如分割URL字符串，并将它们封装到DTO中
 *
 * @param imageId 图片的ID，用于筛选与之关联的公告
 * @return 返回一个List，包含转换后的AsCommunityAnnouncementsDTO对象，每个对象代表一条公告
 */
    public List<AsCommunityAnnouncementsDTO> selectAnnouncementByImageId(Integer imageId) {

        // 初始化一个ArrayList来存储转换后的DTO对象
        ArrayList<AsCommunityAnnouncementsDTO> asCommunityAnnouncementsDTOS = new ArrayList<>();
        // 调用映射器方法，根据图片ID查询到的原始公告数据
        List<AsCommunityAnnouncementsDTO> asCommunityAnnouncements = asCommunityAnnouncementsMapper.selectAnnouncementByImageId(imageId);
        // 遍历查询到的每一条公告
            for (AsCommunityAnnouncements asCommunityAnnouncement : asCommunityAnnouncements) {
                // 封装每条公告信息到DTO对象中
                AsCommunityAnnouncementsDTO announcementsDTO = new AsCommunityAnnouncementsDTO();
                // 使用BeanUtils工具类将公告实体转换为DTO
                BeanUtils.copyProperties(asCommunityAnnouncement, announcementsDTO);
                // 将多图URL字符串使用逗号分割成数组
                String[] urlArray = asCommunityAnnouncement.getUrl().split(",");

            // 将分割后的URL数组转换为List集合
            List<String> urlList = new ArrayList<>(Arrays.asList(urlArray));
            // 将URL列表设置到DTO对象中
            announcementsDTO.setUrlList(urlList);
            // 将处理好的DTO对象添加到集合中
            asCommunityAnnouncementsDTOS.add(announcementsDTO);
        }
        // 返回转换后的DTO对象列表
        return asCommunityAnnouncementsDTOS;
    }

}
